package com.nextel.project.dao;

import com.nextel.project.canje.ControlCanje;
import com.nextel.project.cliente.ControlCliente;
import com.nextel.project.cobranza.ControlCobranza;
import com.nextel.project.pedido.ControlPedido;
import com.nextel.project.usuario.*;
import pe.com.nextel.http.FrmHttpListener;
import pe.com.nextel.http.MensajeHttp;
import com.nextel.project.devolucion.ControlDevolucion;
import com.nextel.project.stock.ControlStock;
import java.io.InputStreamReader;
import org.kxml2.io.KXmlParser;
import pe.com.nextel.idioma.IdiomaManager;

public class HttpControl implements FrmHttpListener {

    public static final HttpControl httpControl = new HttpControl();
    public final short PRCHTTP_VALIDARUSUARIO = 1;
    public final short PRCHTTP_SINCRONIZAR = 2;
    public final short PRCHTTP_PEDIDO = 3;
    public final short PRCHTTP_PEDIDOTOTAL = 13;
    public final short PRCHTTP_PEDIDOTOTALSYNCRONIZAR = 14;
    public final short PRCHTTP_PAGO = 4;
    public final short PRCHTTP_CANJE = 5;
    public final short PRCHTTP_DEVOLUCION = 6;
    public final short PRCHTTP_SINCRO_CLIENTES = 7;
    public final short PRCHTTP_SINCRO_ARTICULOS = 8;
    public final short PRCHTTP_SINCRO_COBRANZAS = 9;
    public final short PRCHTTP_CONSULTAONLINE = 10;
    public final short PRCHTTP_PEDIDOONLINE = 11;
    public final short PRCHTTP_CARGADISTRIBUIDORAS = 12;
    public final short PRCHTTP_PEDIDOCANTIDAD = 15;
    public final short PRCHTTP_STOCK = 16;
    public final short PRCHTTP_STOCK_NOMBRE = 17;
    public final short PRCHTTP_IDIOMA = 18;
    public final short PRCHTTP_TODOS = 19;
    private short proceso;

    public void setProceso(short proceso) {
        this.proceso = proceso;
    }

    private HttpControl() {
    }

    public static HttpControl getInstance() {
        return httpControl;
    }

    public void notifyHttpEnd(MensajeHttp mensajeHttp) throws Exception {
        KXmlParser parser = new KXmlParser();
        InputStreamReader inputReader = new InputStreamReader(mensajeHttp.getInput());
        try {
            parser.setInput(inputReader);

            switch (proceso) {
                case PRCHTTP_VALIDARUSUARIO:
                    ControlUsuario.getInstance().procesarUsuarioOnLine(parser);
                    break;
                case PRCHTTP_SINCRONIZAR:
                    ControlUsuario.getInstance().procesarSincronizar(mensajeHttp);
                    break;
                case PRCHTTP_PEDIDO:
                    //ControlPedido.getInstance().actualizarPedido(parser);
                    ControlPedido.getInstance().actualizarPedido(mensajeHttp.getInput());
                    break;
                case PRCHTTP_PEDIDOTOTAL:
                    ControlPedido.getInstance().procesarRespuestaPedidoTotal(mensajeHttp.getInput());
                    break;
                case PRCHTTP_PEDIDOTOTALSYNCRONIZAR:
                    ControlPedido.getInstance().procesarRespuestaPedidoTotalSyncronizar(mensajeHttp.getInput());
                    break;
                case PRCHTTP_PAGO:
                    ControlCobranza.getInstance().actualizarPago(mensajeHttp.getInput());
                    break;
                case PRCHTTP_DEVOLUCION:
                    ControlDevolucion.getInstance().actualizarDevolucion(mensajeHttp.getInput());
                    break;
                case PRCHTTP_CANJE:
                    ControlCanje.getInstance().actualizarCanje(mensajeHttp.getInput());
                    break;
                case PRCHTTP_TODOS:
                    ControlUsuario.getInstance().actualizarTodos(mensajeHttp.getInput()); 
                    
                    break;    
                case PRCHTTP_SINCRO_CLIENTES:
                    ControlUsuario.getInstance().procesarSincronizarClientes(mensajeHttp);
                    break;
                case PRCHTTP_SINCRO_ARTICULOS:
                    ControlUsuario.getInstance().procesarSincronizarArticulos(mensajeHttp);
                    break;
                case PRCHTTP_SINCRO_COBRANZAS:
                    ControlUsuario.getInstance().procesarSincronizarCobranzas(mensajeHttp);
                    break;
                case PRCHTTP_CONSULTAONLINE:
                    ControlCliente.getInstance().procesarConsultaOnline(mensajeHttp);
                    break;
//                case PRCHTTP_PEDIDOONLINE:
//                    ControlPedido.getInstance().procesarPedidoOnline(mensajeHttp);
//                    break;

                case PRCHTTP_PEDIDOCANTIDAD:
                    ControlPedido.getInstance().procesarPedidoCantidadOnLine(parser);
                    break;
                case PRCHTTP_STOCK:
                    ControlStock.getInstance().procesarStockOnLine(parser);
                    break;
                case PRCHTTP_STOCK_NOMBRE:
                    ControlStock.getInstance().procesarStockNombreOnLine(parser);
                    break;
                case PRCHTTP_IDIOMA:
                    IdiomaManager.getInstance().registrarSincronizacion(mensajeHttp);
                    break;
            }
        } finally {
            inputReader.close();
            inputReader = null;
            parser = null;
        }
        System.gc();
    }

    public void notifyHttpError(MensajeHttp mensajeHttp) {

        switch (proceso) {
            case PRCHTTP_VALIDARUSUARIO:
                ControlUsuario.getInstance().procesarUsuarioOffLine(new String(mensajeHttp.getMensaje()));
                break;
            case PRCHTTP_CARGADISTRIBUIDORAS:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlUsuario.getInstance().mvcUsuario);
                break;
            case PRCHTTP_SINCRONIZAR:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlUsuario.getInstance().mvcMenu);
                break;
            case PRCHTTP_PEDIDO:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_PAGO:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_DEVOLUCION:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_CANJE:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_TODOS: 
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlUsuario.getInstance().mvcMenu);
                break;                
            case PRCHTTP_SINCRO_CLIENTES:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_SINCRO_ARTICULOS:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_SINCRO_COBRANZAS:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_CONSULTAONLINE:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlCliente.getInstance().mvcClienteDetalle);
                break;
            case PRCHTTP_PEDIDOONLINE:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlPedido.getInstance().mvcReporteKPI);
                break;
            default:
                ControlUsuario.getInstance().comunicacionOffLine(new String(mensajeHttp.getMensaje()), ControlUsuario.getInstance().mvcMenu);
                break;
        }
    }
}
